package org.zs.miracle.service.post.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.zs.miracle.common.base.dto.BaseLongIdDTO;
import org.zs.miracle.common.base.dto.BaseManyLongIdDTO;
import org.zs.miracle.common.util.ModelMapperUtil;
import org.zs.miracle.entity.post.PostEntity;
import org.zs.miracle.mapper.PostMapper;
import org.zs.miracle.service.post.IPostService;
import org.zs.miracle.service.post.model.dto.AddPostDTO;
import org.zs.miracle.service.post.model.dto.EditPostDTO;
import org.zs.miracle.service.post.model.dto.PostQueryDTO;
import org.zs.miracle.service.post.model.dto.PostQueryPageDTO;
import org.zs.miracle.service.post.model.vo.PostVO;

/**
 * 用户帖子表Service服务接口实现层
 */
@Service
@AllArgsConstructor
public class IPostServiceImpl implements IPostService {
  
  @Resource
  PostMapper postMapper;
  
  @Override
  public Page<PostVO> pageQueryList(PostQueryPageDTO inputDTO) {
    
    // 构建查询条件
    LambdaQueryWrapper<PostEntity> queryWrapper = Wrappers.lambdaQuery();
    
    // 执行查询用户
    
    return postMapper.selectPage(inputDTO.toMybatisPageObject(), queryWrapper, PostVO.class);
  }
  
  @Override public PostVO getOne(BaseLongIdDTO inputDTO) {
    return postMapper.selectById(inputDTO.getId(), PostVO.class);
  }
  
  @Override public Page<PostVO> pageQuery(PostQueryDTO inputDTO) {
    // 构建查询条件
    LambdaQueryWrapper<PostEntity> queryWrapper = Wrappers.lambdaQuery();
    queryWrapper.eq(PostEntity::getCategorize, inputDTO.getKeywords())
        .eq(PostEntity::getLocation, inputDTO.getLocation());
    // 执行查询用户
    return postMapper.selectPage(inputDTO.toMybatisPageObject(), queryWrapper, PostVO.class);
  }
  
  @Override
  public Boolean delPost(BaseManyLongIdDTO inputDTO) {
    
    // 删除用户
    postMapper.deleteByIds(inputDTO.getIds());
    return true;
  }
  
  @Override
  public Boolean addPost(AddPostDTO inputDTO) {
    
    // 将DTO转换为实体对象
    PostEntity addEntity = ModelMapperUtil.map(inputDTO, PostEntity.class);
    // 插入数据库
    postMapper.insert(addEntity);
    
    return true;
  }
  
  @Override
  public Boolean editPost(EditPostDTO inputDTO) {
    
    // 更新的数据
    PostEntity updateEntity = ModelMapperUtil.map(inputDTO, PostEntity.class);
    
    // 执行更新
    postMapper.updateById(updateEntity);
    
    return true;
  }
}